/**
 * 3
 *  
 * @Author : roryrywang
 * @DateTime : 24-9-3 下午6:56
 */

#include <cstdio>
#include <iostream>
#include <ostream>
#include <vector>

using namespace std;

int n, m;
vector<int> f[100010];
vector<int> st(100010);

bool dfs(int node, int k, int &cnt1, int &cnt2) {
    st[node] = k;
    if (k == 1)cnt1++;
    else cnt2++;
    for (int u: f[node]) {
        if (!st[u]) {
            if (!dfs(u, 3 - k, cnt1, cnt2))return false;
        } else if (st[u] == k) return false;
    }
    return true;
}

int main() {

    cin >> n >> m;

    for (int i = 1; i <= n; i++) {
        st[i] = false;
    }

    for (int i = 0; i < m; i++) {
        int a, b;
        cin >> a >> b;
        f[a].push_back(b);
        f[b].push_back(a);
    }

    // for (int i = 1; i <= n; i++) {
    //   cout << i << ": ";
    //   for (int u : f[i]) {
    //     cout << u << " ";
    //   }
    //   cout << endl;
    // }

    bool flag = true;
    int res = 0;
    for (int i = 1; i <= n; i++) {
        if (!st[i]) {
            int cnt1 = 0;
            int cnt2 = 0;
            if (!dfs(i, 1, cnt1, cnt2)) {
                flag = false;
                break;
            }
            res += min(cnt1, cnt2);
        }
    }

    if (!flag) {
        puts("-1");
    } else {
        cout << res << endl;
    }

    return 0;
}